package model;

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

// 使用这个类 来进行数据操作
// 因为会有很多个 Servlet 用到数据库操作
// 这里就封装一下
// 又因为 Servlet 本身就是在多线程环境下使用的
// 在同一个时间 Tomcat 可能会处理来自不同 Servlet 的请求
// 所以这里 直接使用 单例模式
// 懒汉模式
public class DBUtil {
    private volatile static DataSource dataSource = null;

    // 创建数据源 连接数据库
    private static DataSource getDataSource() {
        if(dataSource == null) {
            synchronized (DBUtil.class) {
                if (dataSource == null) {
                    dataSource = new MysqlDataSource();
                    ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8&useSSL=false");
                    ((MysqlDataSource) dataSource).setUser("root");
                    ((MysqlDataSource) dataSource).setPassword("123456");
                }
            }
        }
        return dataSource;
    }

    // 获取连接
    public static Connection getConnection() throws SQLException {
        return getDataSource().getConnection();
    }

    // 通过这个方法关闭资源
    // 这个代码应该有问题
    // TODO
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
        if(resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
